什麼是JSON 檔案:
JSON 代表 JavaScript 物件表示法,它是一種輕量級的資料交換格式,易於人類閱讀和編寫,也易於機器解析和生成。JSON 通常用於在伺服器和 Web 應用程式之間傳輸數據
也是python常用的儲存物件的內容。例如要訓練AI需要大量的數據,但總不能全部都放於python的字串或字典中,這樣會減低程式碼的可讀性,這時候json就是解決辦法
例如我們把昨天的查詢天氣放到txt檔,可讀性十分低,也不利於以後修改。下面是一個使用json的例孑。
需要用到上次分享的with open放法,如果忘記了可以去我之前的文章再看一次。
####小提示,json是python本身有的模組,不需另外安裝。
import json
import requests as req
url="https://data.weather.gov.hk/weatherAPI/opendata/weather.php"
data="warnsum"
lang="tc"
response = req.get(f"{url}?dataType={data}&lang={lang}")
n=eval(response.text)
#今天的主要內容
json_string = json.dumps(n, indent=2)
with open("data.json","w")as f:
f.write(json_string)
print("done")
執行結果:
>done
data.json:
{
"WTS": {
"name": "\u96f7\u66b4\u8b66\u544a",
"code": "WTS",
"actionCode": "CANCEL",
"issueTime": "2023-09-24T05:20:00+08:00",
"expireTime": "2023-09-24T10:25:00+08:00",
"updateTime": "2023-09-24T10:25:00+08:00"
}
}
Indent可以放入其他數字,可以自行嘗試,但我個人認為2最適合閱讀。
為避免有人不明白程式碼,json.dumps()是一個json裏的功能,第一個變數是將你輸入的變數轉換成其他的格式,第二個變數使用來決定它的隔行。
試從詳細天氣警報訊息中取得資料放入json檔案。
答案:
import json
import requests as req
url="https://data.weather.gov.hk/weatherAPI/opendata/weather.php"
data="warningInfo"
lang="tc"
response = req.get(f"{url}?dataType={data}&lang={lang}")
n=eval(response.text)
json_string = json.dumps(n, indent=2)
with open("data.json","w")as f:
f.write(json_string)
執行結果:
>
data.json:
{
"details": [
{
"contents": [
"\u96f7\u66b4\u8b66\u544a",
"\u5929\u6587\u53f0\u57289\u670824\u65e5\u4e0a\u534810\u664225\u5206\u53d6\u6d88\u96f7\u66b4\u8b66\u544a\u3002"
],
"warningStatementCode": "WTS",
"updateTime": "2023-09-24T10:25:00+08:00"
}
]
}
提示,data.json輸出的資料和我的可能會有所不同
我們在需要用到時便要把它匯出到python物件,下面是一個簡單的例子。
import json
#開啟json file
with open('data.json', 'r') as file:
# 將json物件轉換成python物件
data = json.load(file)
print(data)
print(data["WTS"]["name"]) #資料中的WTS的name項目
執行結果:
{'WTS': {'name': '雷暴警告', 'code': 'WTS', 'actionCode': 'CANCEL', 'issueTime': '2023-09-24T05:20:00+08:00', 'expireTime': '2023-09-24T10:25:00+08:00', 'updateTime': '2023-09-24T10:25:00+08:00'}}
雷暴警告
以下面的json作為例子
{
"name": "John Doe",
"age": 30,
"isStudent": false,
"favoriteFruits": [
"apple",
"banana",
"orange"
],
"address": {
"street": "123 Main St",
"city": "New York",
"country": "USA"
}
}
首先name是一個類似python 字典的內容,而favoriteFruits儲存着三種變數,類似python的list,另外json也能儲存字串、布林值、數字,大家可以自行嘗試輸出變數,以熟習json的物件。
Json的物件大概有只有這些,但經常使用所以建議多訓練,如果覺得我的文章對你有幫助或有更好的建議,可以追蹤我,可以按讚和不妨在留言區提出,明天再見吧。bye
reference:
https://poe.com/